#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL;
using Cephei.QL.Instruments;
namespace Cephei.QL.Experimental
{
     // <summary> 
	// ! The payoff of a Himalaya option is computed in the following way: Given a basket of N assets, and N time periods, at the end of each period the option who performed the best is added to the average and then discarded from the basket. At the end of the N, periods the option pays the max between the strike and the average of the best performers.  \warning This implementation still does not manage seasoned options.
	// </summary>
    [Guid ("D62548A0-99A4-4810-A440-4B250E8E6A7E"),ComVisible(true)]
	public interface IHimalayaOption : Cephei.QL.Instruments.IMultiAssetOption
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
    }

    // <summary> 
	// ! The payoff of a Himalaya option is computed in the following way: Given a basket of N assets, and N time periods, at the end of each period the option who performed the best is added to the average and then discarded from the basket. At the end of the N, periods the option pays the max between the strike and the average of the best performers.  \warning This implementation still does not manage seasoned options. Factory
	// </summary>
   	[ComVisible(true)]
    public interface IHimalayaOption_Factory // : Collection_Factory<IHimalayaOption, ICell<IHimalayaOption>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    IHimalayaOption Create (Cephei.IVector<DateTime> fixingDates, Double strike, Cephei.QL.IPricingEngine QL_Pricer);
    }
}

